import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题


# 读取 Excel 文件中的数据
df = pd.read_excel('result1_1.xlsx', index_col=0, sheet_name="2024")  # 假设地块名在第一列

# 移除包含非数值的列和行
df = df.apply(pd.to_numeric, errors='coerce')

# 将数据中为0的部分替换为NaN，之后在热力图中显示为白色
df_zero_mask = df.copy()
df_zero_mask[df_zero_mask == 0] = float('nan')

# 创建热力图，不显示数据值
plt.figure(figsize=(16, 12))  # 设置更大的图像尺寸
sns.heatmap(df_zero_mask, annot=False, cmap='coolwarm', cbar=True, linewidths=0.5, mask=df_zero_mask.isnull())

# 获取热力图的坐标轴对象
ax = plt.gca()

# 在左上角添加"第一季"标题，向下偏移10
ax.text(x=-0.03, y=0.95, s='Season 1', fontsize=10, fontweight='bold', va='center', ha='center', rotation=90,
        transform=ax.transAxes)

# 在左下角添加"第二季"标题，向上偏移20
ax.text(x=-0.03, y=0.40, s='Season 2', fontsize=10, fontweight='bold', va='center', ha='center', rotation=90,
        transform=ax.transAxes)

# 调整布局，使得标题不被剪切
plt.tight_layout()

# 保存图片到当前路径
plt.savefig("2.png", bbox_inches='tight', dpi=300)  # 设置 dpi 为 300，图片分辨率更高

# 显示热力图
plt.show()
